﻿#ifndef CHATDIALOG_H
#define CHATDIALOG_H

#include <QDialog>
#include <QTcpSocket>
#include <QTcpServer>

#define RECV_PORT 2000 // 接收端口

#define _DATAPAEK 10   // 数据包最大携带数据大小 (测试为10字节)
#define HEARTBEAT 0x44 // 心跳包,用于服务器更新用户收发的端口信息
#define SENDTO 0x55    // 握手
#define SENDOUT 0x7f   // 通信结束

#define ADDGREP 0x0A // 加入群聊
#define DATAINF 0x02 // 发送群聊消息

#define LOGIN 0xfA   // 登陆验证
#define CHAT 0x07    // 消息包
#define DATA 0x0f    // 数据包
#define DATAEND 0xAA // 数据包发送完毕标记



#pragma pack(push, 8)  // 确保双方字节对其

struct date
{
    char file_type; // 此包的传输的数据消息类型
    size_t grep_id;
    size_t sleek; // 此包数据的指针的位置
    size_t size;  // 数据包中 DATA 的字节数
    char talk[_DATAPAEK];
};

#pragma pack(pop) // 恢复默认对齐

QT_BEGIN_NAMESPACE
namespace Ui { class ChatDialog; }
QT_END_NAMESPACE

class ChatDialog : public QDialog
{
    Q_OBJECT

public:
    ChatDialog(QString name, int ID, int grep, QWidget *parent = nullptr);
    ~ChatDialog();

private slots:
    void on_btnSendMsg_clicked();
    void connectedToServer();
    void recvMsg();
    void error(QAbstractSocket::SocketError socketError);
    void newConnection();

private:
    qint16 ID;
    QString name;
    qint16 grep;
    Ui::ChatDialog *ui;
    QTcpSocket sock;
    QTcpServer* sock_listen;


};
#endif // CHATDIALOG_H
